Passa al contenuto principale

Script dell'ambiente

Qui di seguito sono documentati gli script dell'ambiente. I principali sono assemble.ps1 e debug.ps1, il cui uso è mostrato nelle esercitazioni. Gli script run-test.ps1 e run-tests.ps1 sono utili per automatizzare i test, il loro uso è del tutto opzionale.

assemble.ps1

PS /mnt/c/reti_logiche/assembler> ./assemble.ps1 mio_programma.s

Questo script assembla un sorgente assembler in un file eseguibile. Lo script controlla prima che il file passato non sia un eseguibile, invece che un sorgente. Poi, il sorgente viene assemblato usando gcc ad includendo il sorgente ./files/main.c, che si occupa di alcune impostazioni del terminale.

debug.ps1

PS /mnt/c/reti_logiche/assembler> ./debug.ps1 mio_programma

Questo script lancia il debugger per un programma. Lo script controlla prima che il file passato non sia un sorgente, invece che un eseguibile. Poi, il debugger gdb viene lanciato con il programma dato, includendo le definizioni e comandi iniziali in ./files/gdb_startup. Questi si occupano di definire i comandi qquit e rrun (non chiedono conferma), creare un breakpoint in _main e avviare il programma fino a tale breakpoint (così da saltare il codice di setup di ./files/main.c).

run-test.ps1

PS /mnt/c/reti_logiche/assembler> ./run-test.ps1 mio_programma input.txt output.txt

Lancia un eseguibile usando il contenuto di un file come input, e ne opzionalmente ne stampa l'output su file. Lo script fa ridirezione di input/output, con alcuni controlli. Tutti i caratteri del file di input verranno visti dal programma come se digitati da tastiera, inclusi i caratteri di fine riga.

run-tests.ps1

PS /mnt/c/reti_logiche/assembler> ./run-tests.ps1 mio_programma cartella_test

Testa un eseguibile su una serie di coppie input-output, verificando che l'output sia quello atteso. Stampa riassuntivamente e per ciascun test se è stato passato o meno.

Lo script prende ciascun file di input, con nome nella forma in_*.txt, ed esegue l'eseguibile con tale input. Ne salva poi l'output corrispondente nel file out_*.txt. Confronta poi out_*.txt e out_ref_*.txt: il test è passato se i due file coincidono. Nel confronto, viene ignorata la differenza fra le sequenze di fine riga \r\n e \n.